$(function () {
    $('#dg_user').datagrid({
                               onSelect: onSelectDgUser
                           })
})




function onSelectDgUser(index, row) {

    //把原来的树形数据给清空
    $('#user_tree_role').tree('loadData', {});
    //重新加载右侧的菜单树
    init_user_tree_role(row.id);
}

var init_user_tree_role = function(userId){
    $('#user_tree_role').tree({
                                  url: ctx + "/sys/limit/role_user/" + userId,//后台返回属形数据的url
                                  method: 'get',
                                  checkbox: true,//在树形菜单前面加上一个多选框
                                  onBeforeCheck: function (node, checked) {//事件：在选中一个菜单之前运行。我们用来和后台交互，去存储数据库数据
                                      //这个事件如果返回了false，则会阻止用户的操作（勾选，取消勾选）
                                      //获取到当前选中的角色，以便取角色ID
                                      var selected = $('#dg_user').datagrid('getSelected');
                                      //取到当前用户选中的菜单ID（递归去取到所有的子菜单），然后转为一个字符串
                                      var idArr = [];
                                      findChildrenIds(node, idArr);
                                      //提交到后台保存，并返回是否保存成功
                                      return saveRoleLimit(checked,idArr , selected.id);
                                  }
                              });

}

/**
 * 递归去查到选中的所有节点的ID
 * @param node
 * @param idArr
 */
var findChildrenIds = function (node, idArr) {

    var ids = node.id;
    idArr.push(ids);
    var children = node.children;
    if (!node.children) {
        return;
    }
    for (var i = 0; i < children.length; i++) {
        findChildrenIds(children[i], idArr);
    }
}

/**
 * 和后台交互，在数据中存储权限。
 * @param checked
 * @param roleIds
 * @param userId
 * @return 是否保存成功
 */
function saveRoleLimit(checked, roleIds, userId) {
    var isSuccess = false;

    $.ajax({
               url: ctx + '/sys/limit/role_user',
               type: 'put',
               contentType: 'application/json',
               dataType: 'json',
               data: JSON.stringify({checked: checked, roleIds: roleIds, userId: userId}),
               async: false,
               success: function (data) {
                   isSuccess = data.success;
               },
               error: function (xhr) {
                   $.messager.alert('系统提示', "服务器连接失败");
               }
           });
    return isSuccess;
}